package com.cskaoyan.javase.array._1basic._1initialization;

/**
 * 数组的初始化
 * 同样可以类比基本数据类型局部变量的初始化：需要在内存种开辟空间，存储取值
 * 数组的初始化也是一样，需要在内存种开辟空间，存储元素
 * 这样就要求数组的初始化必须完成两个事情：
 *      1.数组的长度必须明确
 *      2.数组中每个存储单元的取值也必须明确
 *
 * 数组初始化的两种形式：
 *      1.静态初始化指的是：
 *      由程序员显式的，指定数组中每个元素的取值，数组的长度由系统决定
 *      （实际上也是由程序员给出的）
 *      和数组的声明写在一起，语法格式就是：
 *          数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
 *      注：new是一个关键字，它的含义是创建对象。（这里是数组对象！）
 *
 *      数组的静态初始化具有简写形式：
 *      数据类型[] 数组名 = {元素1,元素2,元素3...};
 *      注意事项：
 *      数组的静态初始化的简写形式，必须和数组的声明写在一起，表示是第一次初始化这个数组。
 *
 *      2.数组的动态初始化
 *      动态初始化指的是：
 *       程序员只是指定数组的长度，
 *
 *       数组的动态初始化中，数组中每个元素的初始值由系统（实际上是JVM）决定。
 *       是JVM在创建数组对象时，给出的。
 *       这种创建对象时，给对象中的元素赋值的过程称之为默认初始化，这个值称之为默认值！
 *       对象中的元素具有默认初始化，具有默认值！
 *
 *      和数组的声明写在一起，语法格式就是：
 *      数据类型[] 数组名 = new 数据类型[数组长度];
 *
 *
 * 以上，就是数组的两种初始化方式，（一维）数组没有第三种初始化的方式，比如：
 * 静态初始化和动态初始化叠加使用，是经典的错误：
 * 数组名 = new 数据类型[数组长度]{元素1,元素2,元素3...};❌
 *
 *
 *
 *
 *
 * @since 09:24
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 数组的静态初始化，初始化一个int数组

        // 这是一个长度为0的数组
        int[] arr = new int[]{};

        // 长度为0并且元素取值是1,2,3的一个int数组
        int[] arr2 = new int[]{1, 2, 3};

        // 静态初始化的简写形式
        double[] arr3 = {1, 2.0, 3};

        // arr3 = {};
        // new关键字这里的作用是创建一个新的数组对象
        arr3 = new double[]{};

        // 数组的动态初始化
        int[] arr4 = new int[3];

        // 动静结合是典型的错误
        // int[] arr5 = new int[2]{1,2};
    }
}
